package com.glodon.paas.document.dao.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.glodon.paas.document.dao.domain.FileInfoEntity;

public interface FileInfoMapper {

    int deleteByPrimaryKey(String id);

    int insert(FileInfoEntity record);

    int insertSelective(FileInfoEntity record);

    FileInfoEntity selectByPrimaryKey(String id);
    
    FileInfoEntity selectFileWithFolderCount(String id);

    int updateByPrimaryKeySelective(FileInfoEntity record);

    int updateByPrimaryKey(FileInfoEntity record);

    int count(Map<String, Object> param);

    void deleteAllByOwnerId(@Param("ownerId")
    String ownerId, @Param("type")
    Integer type);

    // List<FileInfoEntity> selectRootByOwnerId(
    // @Param("ownerId")String ownerId,
    // @Param("type")Integer type,
    // @Param("deletedStatus") Integer deletedStatus,
    // @Param("startIndex")Integer startIndex,
    // @Param("count")Integer count
    // );
    //
    // List<FileInfoEntity> selectByParentId(
    // @Param("ownerId") String ownerId, //可省略
    // @Param("parentId") String parentId, //parentId必须提供
    // @Param("type") Integer type,
    // @Param("deletedStatus") Integer deletedStatus,
    // @Param("startIndex") Integer startIndex,
    // @Param("count") Integer count
    // );
    //
    // List<FileInfoEntity> selectByOwnerId(
    // @Param("ownerId") String ownerId, //ownerId必须提供
    // @Param("parentId") String parentId, //parentId必须提供
    // @Param("type") Integer type,
    // @Param("deletedStatus") Integer deletedStatus,
    // @Param("startIndex") Integer startIndex,
    // @Param("count") Integer count
    // );
    // /**
    // * 根据全名判断
    // *
    // * @param ownerId
    // * @param parentId
    // * @param fileName
    // * @param extension
    // * @param startIndex
    // * @param count
    // * @return
    // */
    // List<FileInfoEntity> selectByFullName(
    // @Param("ownerId") String ownerId, //可省略
    // @Param("parentId") String parentId, //必须
    // @Param("type") Integer type,
    // @Param("fileName") String fileName,
    // @Param("extension") String extension,
    // @Param("deletedStatus") Integer[] deletedStatus,
    // @Param("startIndex") Integer startIndex,
    // @Param("count") Integer count
    // );

    List<FileInfoEntity> selectFiles(@Param("parentId")
    String parentId, // 必须
                                     @Param("fileName")
                                     String fileName, @Param("extension")
                                     String extension, @Param("deletedStatus")
                                     Integer[] deletedStatus, @Param("types")
                                     Integer[] types);

    List<FileInfoEntity> selectDeletedFiles(String ownerId);

    // int updateDeletedStatus(
    // @Param("id")String id,
    // @Param("deleteStatus")Integer deleteStatus,
    // @Param("updateTime")Date updateTime
    // );

    Long totalUsedSize(@Param("ownerId")
    String ownerId, @Param("includeRecycle")
    boolean includeRecycle);

    // long sumSize_xx(
    // @Param("ownerId")String ownerId,
    // @Param("parentId")String parentId,
    // @Param("type")Integer type,
    // @Param("deletedStatus")Integer deletedStatus,
    // @Param("beginTime")Date beginTime,
    // @Param("endTime")Date endTime
    // );

    // int uploadFileName(
    // @Param("id")String id,
    // @Param("name")String name
    // );

    // int updateShareStatus(
    // @Param("id")String id,
    // @Param("shared")boolean shared
    // );

    // void updateSizeNumCount(
    // @Param("id")String id,
    // @Param("fileSize")long fileSize,
    // @Param("latestAvailableRevisionNum")int latestAvailableRevisionNum,
    // @Param("count")int count,
    // @Param("updateTime")Date updateTime
    // );

    // void updateCount(
    // @Param("id")String id,
    // @Param("count")int count
    // );

    int updateByPrimaryKeyMap(Map<String, Object> param);

    List<FileInfoEntity> selectByComplex(Map<String, Object> param);

    // top 1000
    List<FileInfoEntity> selectExpiredFiles(@Param("ownerId")
    String ownerId, @Param("updateTime")
    Date delDay, @Param("limited")
    int limited);
}
